Интерактивный цветочек

Возьмите мышкой за желтый кружок в центре цветочка и потяните в любую сторону. С цветочка также можно обрывать лепестки.



В этой статье мы представляем вашему внимаю пример использования JavaScript библиотеки KineticJS, использующей HTML5 Canvas для создания интерактивных приложений. Изображение цветочка перетаскивается в разные стороны, с него можно обрывать лепестки, таскать их по всему полю, возвращать на место. При этом стебель наклоняется и растягивается в длину. Весьма необычно и впечатляюще. Ну и, конечно, самое главное, все это достигается довольно простым и небольшим по объему кодом, с которым мы вас с удовольствием познакомим.

Как же сделано это чудо? Здесь используется тегc <canvas> и JavaScript библиотека kinetic-v3.7.2.

Для начала присоеденим библиотеку.

CODE:

<script src="http://www.html5canvastutorials.com/libraries/kinetic-v3.7.3.js"> </script>

Далее, между тегами <script></script> пропишем следующий код:

CODE:



   
        function drawLine(flower, lineLayer){
            var stage = flower.getStage();
            var context = lineLayer.getContext();
 
            context.save();
            context.beginPath();
            lineLayer.clear();
            context.strokeStyle = "green";
            context.lineWidth = 10;
            context.moveTo(flower.x, flower.y);
            context.lineTo(stage.width / 2, stage.height + 10);
            context.fill();
            context.stroke();
            context.closePath();
            context.restore();
        }
 
        window.onload = function(){
            var stage = new Kinetic.Stage("container", 578, 200);
            var flowerLayer = new Kinetic.Layer();
            var lineLayer = new Kinetic.Layer();
            var flower = new Kinetic.Group();
 
            // build center
            var center = new Kinetic.Shape(function(){
                var context = this.getContext();
                context.beginPath();
                context.lineWidth = 4;
                context.fillStyle = center.color;
                context.arc(0, 0, 20, 0, 2 * Math.PI, false);
                context.fill();
                context.stroke();
                context.closePath();
            });
 
            // add custom property
            center.color = "yellow";
 
            center.on("mousedown", function(){
                flower.draggable(true);
                document.body.style.cursor = "pointer";
            });
            center.on("mouseover", function(){
                this.color = "orange";
                flowerLayer.draw();
            });
            center.on("mouseout", function(){
                this.color = "yellow";
                flowerLayer.draw();
            });
 
            // build petals
            var numPetals = 10;
            for (var n = 0; n < numPetals; n++) {
                (function(){
                    var petal = new Kinetic.Shape(function(){
                        var context = this.getContext();
                        context.globalAlpha = 0.8;
                        context.beginPath();
                        context.lineWidth = 4;
                        context.fillStyle = petal.color;
                        context.moveTo(-5, -20);
                        context.bezierCurveTo(-40, -90, 40, -90, 5, -20);
                        context.fill();
                        context.stroke();
                        context.closePath();
                    });
 
                    // add custom property
                    petal.color = "#00dddd";
 
                    petal.draggable(true);
 
                    petal.on("dragstart", function(){
                        this.moveToTop();
                        center.moveToTop();
                    });
                    petal.on("mouseover", function(){
                        this.color = "blue";
                        flowerLayer.draw();
                    });
                    petal.on("mouseout", function(){
                        this.color = "#00dddd";
                        flowerLayer.draw();
                    });
 
                    var rotation = 2 * Math.PI * n / numPetals;
                    petal.setRotation(rotation);
 
                    flower.add(petal);
                }());
            }
 
            stage.on("mouseup", function(){
                flower.draggable(false);
                document.body.style.cursor = "default";
            });
 
            flower.on("dragmove", function(){
                drawLine(this, lineLayer);
            });
 
            flower.add(center);
            flower.setPosition(stage.width / 2, stage.height / 2);
            flowerLayer.add(flower);
 
            stage.add(lineLayer);
            stage.add(flowerLayer);
 
            drawLine(flower, lineLayer);
        };
    








Теперь в теле документа пропишем следующее:

CODE:

<body onmousedown="return false;">      
<div id="container">      
</div>  
</body>


Оригинал статьи на английском языке: www.html5canvastutorials.com





Комментарии ВКонтакте

arrow вернуться к странице статей про HTML5 Canvas